/**
 * @file GzipFormat.h
 * @brief GZIP格式插件头文件
 * @details 定义了处理GZIP格式压缩文件的插件类
 */

#ifndef GZIP_FORMAT_H
#define GZIP_FORMAT_H

#include "FormatPlugin.h"
#include <String.h>

/**
 * @class GzipFormat
 * @brief GZIP格式处理插件
 * @details 实现了GZIP格式的压缩和解压缩功能
 */
class GzipFormat : public FormatPlugin
{
public:
    /**
     * @brief 构造函数
     */
    GzipFormat();

    /**
     * @brief 析构函数
     */
    virtual ~GzipFormat();

    /**
     * @brief 获取插件支持的格式名称
     * @return 格式名称
     */
    virtual BString GetFormatName() const;

    /**
     * @brief 获取插件支持的文件扩展名列表
     * @return 扩展名列表，以分号分隔
     */
    virtual BString GetSupportedExtensions() const;

    /**
     * @brief 检查插件是否支持指定的文件
     * @param filePath 文件路径
     * @return 是否支持
     */
    virtual bool CanHandle(const char *filePath) const;

    /**
     * @brief 压缩文件或目录
     * @param sourcePath 源文件或目录路径
     * @param targetPath 目标压缩文件路径
     * @return 操作是否成功
     */
    virtual bool Compress(const char *sourcePath, const char *targetPath);

    /**
     * @brief 解压缩文件
     * @param sourcePath 源压缩文件路径
     * @param targetPath 目标解压目录
     * @return 操作是否成功
     */
    virtual bool Extract(const char *sourcePath, const char *targetPath);

    /**
     * @brief 列出压缩文件中的内容
     * @param archivePath 压缩文件路径
     * @return 内容列表字符串
     */
    virtual BString ListContents(const char *archivePath);

private:
    /**
     * @brief 检查文件是否为GZIP格式
     * @param filePath 文件路径
     * @return 是否为GZIP格式
     */
    bool _IsGzipFile(const char *filePath) const;

    /**
     * @brief 执行GZIP命令行工具
     * @param command 命令行字符串
     * @return 执行是否成功
     */
    bool _ExecuteGzipCommand(const char *command) const;

    /**
     * @brief 处理TAR.GZ格式
     * @param isTarGz 是否为TAR.GZ格式
     */
    bool _IsTarGzFile(const char *filePath) const;
};

#endif // GZIP_FORMAT_H